home *** CD-ROM | disk | FTP | other *** search
- /* ANTLRTokenBuffer.h
- *
- * SOFTWARE RIGHTS
- *
- * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
- * Set (PCCTS) -- PCCTS is in the public domain. An individual or
- * company may do whatever they wish with source code distributed with
- * PCCTS or the code generated by PCCTS, including the incorporation of
- * PCCTS, or its output, into commerical software.
- *
- * We encourage users to develop software with PCCTS. However, we do ask
- * that credit is given to us for developing PCCTS. By "credit",
- * we mean that if you incorporate our source code into one of your
- * programs (commercial product, research project, or otherwise) that you
- * acknowledge this fact somewhere in the documentation, research report,
- * etc... If you like PCCTS and have developed a nice tool with the
- * output, please mention that you developed it using PCCTS. In
- * addition, we ask that this header remain intact in our source code.
- * As long as these guidelines are kept, we expect to continue enhancing
- * this system and expect to make other tools available as they are
- * completed.
- *
- * ANTLR 1.31
- * Terence Parr
- * Parr Research Corporation
- * with Purdue University and AHPCRC, University of Minnesota
- * 1989-1995
- */
-
- #ifndef ATOKENBUFFER_H_GATE
- #define ATOKENBUFFER_H_GATE
-
- #include "config.h"
- #include ATOKEN_H
- #include ATOKENSTREAM_H
- #include <stdlib.h>
-
- /*
- * The parser is "attached" to an ANTLRTokenBuffer via interface
- * functions: getToken() and bufferedToken(). The object that actually
- * consumes characters and constructs tokens is connected to the
- * ANTLRTokenBuffer via interface function ANTLRTokenStream::getToken();
- * where ANTLRTokenStream is really just a behavior (class with no data).
- * C++ does not have this abstraction and hence we simply have come up
- * with a fancy name for "void *". See the note in ANTLRTokenStream.h on
- * the "behavior" of ANTLRTokenStream.
- */
-
- class ANTLRTokenBuffer {
- protected:
- ANTLRTokenStream *input; // where do I get tokens
- int buffer_size;
- int chunk_size;
- int num_markers;
- int k; // Need at least this many tokens in buffer
- ANTLRAbstractToken **buffer; // buffer used for arbitrary lookahead
- ANTLRAbstractToken **tp; // pts into buffer; current token ptr
- ANTLRAbstractToken **last; // pts to last valid token in buffer
- ANTLRAbstractToken **next; // place to put next token from getANTLRToken()
- ANTLRAbstractToken **end_of_buffer;
-
- // This function is filled in by the subclass; it initiates a fetch of input
- virtual ANTLRAbstractToken *getANTLRToken() { return input->getToken(); }
- void makeRoom();
- void extendBuffer();
-
- public:
- ANTLRTokenBuffer(ANTLRTokenStream *in, int k=1, int chksz=200);
-
- virtual ~ANTLRTokenBuffer();
- virtual ANTLRAbstractToken *getToken();
- virtual void rewind(int pos);
- virtual int mark();
- virtual ANTLRAbstractToken *bufferedToken(int i);
-
- virtual bufferSize() { return buffer_size; }
- virtual int minTokens() { return k; }
- virtual void setMinTokens(int k_new) { k = k_new; }
-
- virtual void panic(char *msg) { exit(-1); }
- };
-
- #endif
-